package com.forestar.mapControl.utils.tile.tileget;

/**
 * 创建时间：2018/8/28
 * 作者: petra
 * 说明：影像请求入口， 提供网络影像和本地影像的绘制方法，此处获取的瓦片可以是从瓦片源获取的原始瓦片，也可以从多个瓦片源获取瓦片后，再做融合，然后再绘制。
 **/
public class MzTileProvider{}
//        implements MzTileLoadListener
//  {
//    //瓦片下载完成后通知用。
//    private final MzTileNotificationHandler notificationHandler;
//    private final Context context;
//    private final MapControl mapControl;
//
//    //实际上的数据源，可以是本地的或是网络的
//    public MzTileSource tileSource;
//
//    protected final List<MzTileBean> mUnaccessibleTiles;
//
//    protected final MzTileCache tileCache;
//    private final static List<String> working = new LinkedList<>();
//    //网络影像线程池
//    private MzThreadPoolExecutor webExecutor;
//    //本地影像线程池
//    private static ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 8, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), new ConfigurablePriorityThreadFactory(Thread.NORM_PRIORITY, "本地影像"), new ThreadPoolExecutor.DiscardOldestPolicy());
//    private AtomicInteger requestID = new AtomicInteger(0);
//    private NetworkAvailabilityCheck mNetworkAvailabilityCheck;
//
//    /**
//     * @param tileSource          数据来源
//     * @param notificationHandler 瓦片下载完成后通知用。
//     */
//    public MzTileProvider(final MzTileSource tileSource, MzTileNotificationHandler notificationHandler, MapControl mapControl)
//      {
//        mUnaccessibleTiles = new ArrayList<MzTileBean>();
//        tileCache = MzTileCache.getInstance();
//        this.tileSource = tileSource;
//        this.notificationHandler = notificationHandler;
//        this.mapControl = mapControl;
//        this.context = mapControl.getContext();
//        webExecutor = TileLayerManager.getTitleThreadPoolExecutor();
//        mNetworkAvailabilityCheck = new NetworkAvailabilityCheck(context);
//      }
//
//    /**
//     * 设置一个瓦片源，全先清除原来的源。
//     *
//     * @param tileSource 瓦片源。
//     */
//    public void setTileSource(final MzTileSource tileSource)
//      {
//        mUnaccessibleTiles.clear();
//        synchronized (this.tileSource)
//          {
//            this.tileSource.detach();
//            this.tileSource = tileSource;
//          }
//      }
//
//    /**
//     * 请求一个瓦片，完成后会根据回调通知到绘制线程
//     *
//     * @param tile        瓦片索引
//     * @param cacheCanvas
//     * @param requestID
//     * @return 瓦片
//     */
//    public void requestTile(MzTileBean tile, CacheCanvas cacheCanvas, int requestID, Handler handler)
//      {
//        if (null == tile)
//          {
//            return;
//          }
//        boolean isProgressing = false;
//        MzTileLoadWork work = new MzTileLoadWork(tile, tileSource, tileCache, requestID, this, checkNetworkIsAllowedDownload(), cacheCanvas);
//        synchronized (working)
//          {
//            isProgressing = working.contains(tile.getCacheKey());
//          }
//        if (isProgressing)
//          {
//            return;
//          }
//        synchronized (working)
//          {
//            working.add(tile.getCacheKey());
//          }
//        webExecutor.execute(work);
//        //        work.run();
//      }
//
//    /**
//     * 重新申请cache的内存，以满足瓦片缓存
//     *
//     * @param tileCount 瓦片数量
//     */
//    public void resizeCacheMemory(int tileCount)
//      {
//        tileCache.resizeCacheMemory(tileCount);
//      }
//
//    /**
//     * 在缓存中获取瓦片，包含内存缓存和磁盘缓存，根据源不同，判断是否有磁盘缓存。本地源就没有磁盘缓存
//     *
//     * @param tile
//     * @return
//     */
//    public Drawable getTileDrawableFromMemory(MzTileBean tile)
//      {
//        if (null == tile)
//          {
//            return null;
//          }
//        //为了绘制时速度更快，只从内存缓存里加载瓦片，
//        CacheableBitmapDrawable drawable = tileCache.getMzTileFromMemory(tile);
//        if (null != drawable && drawable.isBitmapValid() && !drawable.isExpired())
//          {
//            drawable.setBeingUsed(true);
//          }
//        return drawable;
//      }
//
//    public void requestTile(MzTileBean tile, CacheCanvas cacheCanvas, MzTileLayer tileLayer)
//      {
//        if (null == tile)
//          {
//            return;
//          }
//        boolean isProgressing = false;
//        MzTileLoadWork work = new MzTileLoadWork(tile, tileSource, tileCache, requestID.get(), this, checkNetworkIsAllowedDownload(), cacheCanvas);
//        //        synchronized (working)
//        //          {
//        //            isProgressing = working.contains(tile.getCacheKey());
//        //          }
//        //        if (isProgressing)
//        //          {
//        //            return;
//        //          }
//        //        synchronized (working)
//        //          {
//        //            working.add(tile.getCacheKey());
//        //          }
//        if (tileLayer instanceof MzWebTileLayer)
//          {
//            webExecutor.execute(work);
//          } else
//          {
//            executor.execute(work);
//          }
//      }
//
//    @Override
//    public void onTileLoadFinished(MzTileBean tile)
//      {
//        //        working.remove(tile.getCacheKey());
//        synchronized (mapControl)
//          {
//            mapControl.getGeoMap().refreshTile(tile);
//          }
//      }
//
//    @Override
//    public void onTileLoadError(MzTileLoadWork work)
//      {
//       // webExecutor.execute(work);
//      }
//
//    //根据用户设置 检查网络环境是否可以下载瓦片
//    private boolean checkNetworkIsAllowedDownload()
//      {
//        int loadWebTileType = MapzoneConfig.getInstance().getIntValue(LOAD_WEBTILE_TYPE_PREFERENCES_KEY, LOAD_WEBTILE_ALL_NETWORK);
//        int networkType = mNetworkAvailabilityCheck.getConnectedType();
//        if (loadWebTileType == LOAD_WEBTILE_ONLY_OFFLINE || networkType == -1)
//          {
//            return false;
//          }
//        if (loadWebTileType == LOAD_WEBTILE_ALL_NETWORK || loadWebTileType == LOAD_WEBTILE_ALL_NETWORK_REFRESH)
//          {
//            return true;
//          }
//        if ((loadWebTileType == LOAD_WEBTILE_ONLY_WIFI || loadWebTileType == LOAD_WEBTILE_ONLY_WIFI_REFRESH) && networkType == ConnectivityManager.TYPE_WIFI)
//          {
//            return true;
//          }
//        return false;
//      }
//  }
